package helpmaker.view; import helpmaker.Main; import helpmaker.additional.XMLParameterEditDetails; import helpmaker.components.CustomHTMLEditor; import helpmaker.model.*; import helpmaker.util.IDGenerator; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.layout.AnchorPane; import javafx.util.Callback; import java.io.*; public class MainController { @FXML private TreeView XMLTreeView; @FXML private TableView XMLNodeParameters; @FXML private TableColumn<XMLParameter, String> keyColumn; @FXML private TableColumn<XMLParameter, String> valueColumn; @FXML private AnchorPane rightPane; private CustomHTMLEditor htmlEditor; private ObservableList<XMLParameter> parameters = FXCollections.observableArrayList(); private XMLNodeItemExtended currentSelectedXMLNodeItemExtended; private HelpXMLTree XMLTreeModel; private Main mainApp; public MainController() { } public void initialize() { rightPane.getChildren().remove(0, rightPane.getChildren().size()); htmlEditor = new CustomHTMLEditor(); rightPane.getChildren().add(htmlEditor); XMLTreeModel = new HelpXMLTree("Help/help.xml"); XMLTreeView.setRoot(XMLTreeModel.getRootTreeItem()); XMLTreeView.setEditable(true); XMLTreeView.setCellFactory(new Callback<TreeView, TreeCell>() { @Override public TreeCell call(TreeView param) { return new TextFieldTreeCellImpl(); } }); keyColumn.setCellValueFactory(cellData -> cellData.getValue().getKeyProperty()); valueColumn.setCellValueFactory(cellData -> cellData.getValue().getValueProperty()); } public void initializeAfterShow() { htmlEditor.initializeNewFunctionality(); htmlEditor.setBtnSaveSetOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { htmlEditor.setPageChanged(true); saveHTMLFile(); } }); htmlEditor.setBtnAddLinkSetOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { Link link = mainApp.showInsertLinkDialog(htmlEditor.getSelectedText()); if ((link != null) && (link.linkValid())) htmlEditor.insertLink(link.getLink(), link.getCaption()); } }); } public void setMainApp(Main mainApp) { this.mainApp = mainApp; } public void btnSaveTreeClick() { XMLTreeModel.saveTree(); } public void onTreeViewClick() { XMLNodeItemExtended justSelectedNode = ((TreeItem<XMLNodeItemExtended>) XMLTreeView.getFocusModel().getFocusedItem()).getValue(); if ((justSelectedNode != null) && (currentSelectedXMLNodeItemExtended != justSelectedNode)) { saveHTMLFile(); currentSelectedXMLNodeItemExtended = justSelectedNode; parameters.remove(0, parameters.size()); parameters = FXCollections.observableArrayList(currentSelectedXMLNodeItemExtended.getParameters()); XMLNodeParameters.setItems(parameters); readFileToHTMLEditor(currentSelectedXMLNodeItemExtended.getParameterValueByKey(XMLParameter.PARAMETER_ID)); } } public void onAddXMLParameterClick() { int selectedXMLNodeIndex = XMLTreeView.getSelectionModel().getSelectedIndex(); if (selectedXMLNodeIndex >= 0) { XMLParameter xmlParameter = new XMLParameter(); mainApp.showXMLParameterEditDialog(xmlParameter, XMLParameterEditDetails.XMLPARAM_WINDOWNAME_ADD, XMLParameterEditDetails.getIconAdd()); if (xmlParameter.isValid()) { currentSelectedXMLNodeItemExtended.addParameter(xmlParameter); XMLNodeParameters.getItems().add(XMLNodeParameters.getItems().size(), xmlParameter); } } } public void onEditXMLParameterClick() { int selectedIndex = XMLNodeParameters.getSelectionModel().getSelectedIndex(); if (selectedIndex >= 0) { XMLParameter xmlParameter = (XMLParameter) XMLNodeParameters.getSelectionModel().getSelectedItem(); mainApp.showXMLParameterEditDialog(xmlParameter, XMLParameterEditDetails.XMLPARAM_WINDOWNAME_EDIT, XMLParameterEditDetails.getIconEdit()); } } public void onDeleteXMLParameterClick() { int selectedIndex = XMLNodeParameters.getSelectionModel().getSelectedIndex(); if (selectedIndex >= 0) { currentSelectedXMLNodeItemExtended.deleteParameter(selectedIndex); XMLNodeParameters.getItems().remove(selectedIndex); } } private void readFileToHTMLEditor(String fileName) { String text = ""; if (!fileName.equals("")) try { FileInputStream inFile = new FileInputStream("Help/" + fileName + ".htm"); byte[] str = new byte[inFile.available()]; inFile.read(str); text = new String(str); } catch (FileNotFoundException e) { } catch (IOException e) { e.printStackTrace(); } htmlEditor.setHtmlText(text); } public void saveHTMLFile() { if (currentSelectedXMLNodeItemExtended != null) htmlEditor.saveHTMLPageToFile( "Help/" + currentSelectedXMLNodeItemExtended.getParameterValueByKey(XMLParameter.PARAMETER_ID) + ".htm"); } public void onNewDocumentClick() { TreeItem<XMLNodeItemExtended> selectedTreeItem = (TreeItem<XMLNodeItemExtended>) XMLTreeView.getFocusModel().getFocusedItem(); if (selectedTreeItem != null) { String newTreeItemCaption = mainApp.showXMLNodeNewDialog(); if ((!newTreeItemCaption.equals("")) && (!HelpXMLTree.isTreeItemHasChildWithCaption(selectedTreeItem, newTreeItemCaption))) { TreeItem<XMLNodeItemExtended> newTreeItem = new TreeItem<>(new XMLNodeItemExtended(newTreeItemCaption)); newTreeItem.setGraphic(HelpXMLTree.getIcon(false)); String idNumber; do { idNumber = IDGenerator.generateID(); } while (HelpXMLTree.isTreeHasSameID(XMLTreeModel.getRootTreeItem(), idNumber)); newTreeItem.getValue().addParameter(XMLParameter.PARAMETER_ID, idNumber); selectedTreeItem.getChildren().add(newTreeItem); selectedTreeItem.setGraphic(HelpXMLTree.getIcon(true)); } } } public void onDeleteDocumentClick() { TreeItem<XMLNodeItemExtended> selectedTreeItem = (TreeItem<XMLNodeItemExtended>) XMLTreeView.getFocusModel().getFocusedItem(); if (selectedTreeItem != null) { if (selectedTreeItem.getParent().getChildren().size() == 1) selectedTreeItem.getParent().setGraphic(HelpXMLTree.getIcon(false)); XMLTreeModel.deleteItem(selectedTreeItem); } } }